#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2023/9/5 23:03
# @Author  : BadMan
# @FileName: Xpath解析.py
from lxml import etree
import requests

"""
    xpath表达式:
    - /: 表示从根节点开始定位，表示的是一个层级
    - //: 表示多个层级，可以从任意位置开始定位
    - 属性定位: //div[@class="xxx"]
    - 索引定位: //div[@class="xxx"]/p[x] 从1开始
    - 取文本:
        - /text() 获取标签中直系的文本内容
        - //text() 标签中非直系的文本内容(所有文本内容)
    - 取属性:
        - img/@src
"""


if __name__ == '__main__':
    # 实例化 etree 对象，且将被解析的源码加载到该对象
    tree = etree.parse('test.html')
    # / 表示从根节点开始 -- 一个 / 表示一个层级
    # # 存储3组div,返回 List类型
    r = tree.xpath('/html/body/div')
    print(r)
    # // 表示多个层级,跨过了 body这个层级
    # r = tree.xpath('/html//div')
    # print(r)
    # # # 从任意位置开始,找到源码当中所有的 div 标签
    # r = tree.xpath('//div')
    # print(r)
    # #
    # # # 属性定位
    # # # 从任意位置开始，先找到源码中所有的 div 标签
    # # # 再根据 div 标签查找 属性为 song的 div 标签
    # # # 属性定位 xpath('//div[@class="song"]')
    # # # tag[@attrName="attrValue"]
    # r = tree.xpath('//div[@class="song"]')
    # print(r)
    # #
    # # # 索引定位
    # # # 定义 div 下的 P 标签
    # # 注意 P[X] 索引从1开始而不是0
    # r = tree.xpath('//div[@class="song"]/p[3]')
    # print(r)
    # #
    # # # 取文本
    # # # /text() 获取的是标签中直系内容
    # # # //text() 获取所有标签中的内容
    # r = tree.xpath('//div[@class="tang"]/ul/li[3]/a/text()')[0]
    # print(r)
    # r = tree.xpath('//li[7]//text()')[0]
    # print(r)
    # r = tree.xpath('//div[@class="tang"]//text()')
    # print(r)
    #
    # # #取属性
    # r = tree.xpath('//div[@class="song"]/img/@src')
    # print(r)
